home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / devel / wild / appunti / animate.txt next >
Text File  |  1999-01-01  |  4KB  |  93 lines

  1. Animation Extension Project.
  2.  
  3. That's to do after a good GFX is done, or will be useless.
  4. The animation must have:
  5.  
  6. - Paths for any sector: a path is a traslation and a rotation in a fixed time.
  7. - x,Vx,Ax (and y,z,RI,RJ,RK).
  8.   Any movement is defined by those initial conditions, or maybe only by some:
  9.   for example, only Ax means to have a acceleration in x, if you are stopped
  10.   but also if you are moving. For example, a car's action: stop ! should be a
  11.   deceleration, not to set any V or x.
  12.   A movement must stop when a condition is lacked.
  13.   The condition may be: time expired, value reached (for any variable) or
  14.   user-defined. So, there should be a queue of routines to check if the
  15.   movement has to stop. This should be defined by an array like that:
  16.  
  17.   EXCHK_TIMEOUT,timeoutvalue,EXCHK_HADVALUE,var,value,EXCHK_USER,code,data,
  18.   EXCHK_DONE.
  19.  
  20.   Something like a taglist, but more flexible: with all the params needed,
  21.   not only one. There is no problem, because ALL the "tags" are supported,
  22.   and no problems like "this tag is unknow, how can I skip it if I don't
  23.   know how many args has ?".
  24.  
  25.   The action should stop also if a new action is said to be done.
  26.  
  27. - Tha functions to have:
  28.  
  29. DoAction()    Make the object(s) know to do the specified action, so must
  30.               take the moment to do timed actions then. Can also stop
  31.               precedent movements, if needed. Example: a kick of a fighter
  32.               should stop if he hits the wall, and should start the new
  33.               action "stop kick and take the leg down".
  34.  
  35. Animate()     Makes the object(s) move, so modifies the refs.
  36.               An option to add: the instant made is the current, but there
  37.               should be an option (a space in the structure) to add some
  38.               time. An example: if you have to animate 10 objects sychronously,
  39.               you have to call 10 times Animate(). But doing that, 10 different
  40.               times are taken, and 10 different positions are showed in
  41.               the display. So, the option should let you specify a specific time.
  42.               This time should be calced to be exactly the moment of the display
  43.               of the scene. So, a func should be provided, something like
  44.               a CatchCalcTime() and CatchDisplayTime().
  45.               So, before animating any object, you should call CatchCalcTime(),
  46.               and this will:
  47.               1) catch the current time =calctime.
  48.               2) return the current time + the gap (see above)
  49.               The CatchDisplayTime() should:
  50.               1) catch the current time =displaytime.
  51.               2) calc the gap: displaytime-calctime.
  52.                  This may be calced also seeing precedent frames and doing
  53.                  something like a median time, because this is supposed to
  54.                  work when all frames have the same calc-render time, and
  55.                  this is not true. So, a median can help to reduce strange
  56.                  effects.
  57.  
  58. Catch...() said before.
  59.  
  60. LoadAnimation() Should load the animations for any object, from a std file:
  61.                 so, the LoaderModule must support also this.
  62.                 An extension to the loader should be performed.
  63.                 Something like a Extend format, with some things managed
  64.                 not only by wild but also from somewhere.
  65.                 And also wild should call extern routines when loading, so
  66.                 add something like a LoaderHandlerAdd func to wild.
  67.  
  68.  
  69. NEW IDEAS....
  70.  
  71. AnimateSingle: ha il LastAnimShot che è lo shapshot dell'INIZIO dell'ultima Move fatta,
  72.            quindi deve: fare COMPLETAMENTE tutte le actions fino a quella attuale.
  73.            NO alle ottimizzazioni tipo se c'è SET non fare quelle indietro,..., sono
  74.            noiose, COMPLICATE e poco affidabili: ci sono un sacco di casi da fare.
  75.            Tanto fare una Move è abbastanza veloce...
  76.          
  77. finalc=startc+t*startv+t*t*starta/2
  78. finalv=startv+t*starta
  79. finala=starta
  80.  
  81. opt:
  82. deltav=t*starta
  83. finalc=startc+t*startv+deltav*t/2
  84. finalv=startv+deltav
  85. finala=starta
  86.  
  87. (mul *3 più varie somme...) una Move sono 6 vars: 18 mul
  88.  
  89. Devo trovare il modo di trasformare I,J,K in Rx,Ry,Rz e definire quest'ultime in qualche
  90. modo... Poi devo fare il contrario al momento giusto...
  91.  
  92.  
  93.